/**
 * Copyright (c) Huawei Technologies Co., Ltd. 1987-2021. All rights reserved.
*/

package com.gitee.fufu669.response;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.List;

/** @author wangfupeng */
@ApiModel("列表返回")
/**
 * TODO
*/
public class ListResponseLong<T> extends SimpleResponse {

    /**
     * TODO
    */
    public static final Long DEFAULT_PAGE_SIZE = 50L;

    // 注解
    @ApiModelProperty(value = "总数", example = "1")
    // TODO
    private Long count; // 总数

    // 注解
    @ApiModelProperty(value = "页大小", example = "20")
    // TODO
    private Long limit; // 页大小

    // 注解
    @ApiModelProperty(value = "总页数", example = "1")
    // TODO
    private Long totalPage; // 总页数

    // 注解
    @ApiModelProperty(value = "当前页", example = "1")
    // TODO
    private Long page; // 当前页

    // 注解
    @ApiModelProperty(value = "当前偏移量", example = "20")
    // TODO
    private Long offset; // 当前偏移量

    /**
     * TODO
    */
    public Long getCount() {
        // 返回
        return count;
    }

    /**
     * TODO
    */
    public void setCount(Long count) {
        // 赋值
        this.count = count;
    }

    /**
     * TODO
    */
    public Long getLimit() {
        // 返回
        return limit;
    }

    /**
     * TODO
    */
    public void setLimit(Long limit) {
        // 赋值
        this.limit = limit;
    }

    /**
     * TODO
    */
    public Long getTotalPage() {
        // 返回
        return totalPage;
    }

    /**
     * TODO
    */
    public void setTotalPage(Long totalPage) {
        // 赋值
        this.totalPage = totalPage;
    }

    /**
     * TODO
    */
    public Long getPage() {
        // 返回
        return page;
    }

    /**
     * TODO
    */
    public void setPage(Long page) {
        // 赋值
        this.page = page;
    }

    /**
     * TODO
    */
    public Long getOffset() {
        // 返回
        return offset;
    }

    /**
     * TODO
    */
    public void setOffset(Long offset) {
        // 赋值
        this.offset = offset;
    }

    /**
     * TODO
    */
    public static <T> ListResponseLong<T> success(List<T> data, Long totalCount, Long page) {
        // 返回
        return success(data, totalCount, page, 20L);
    }

    /**
     * TODO
    */
    public static <T> ListResponseLong<T> success(List<T> data, Long totalCount, Long page, Long pageSize) {
        // 创建
        ListResponseLong response = new ListResponseLong();
        // TODO
        response.setData(data);
        // TODO
        response.setStatus(SUCCESS_STATUS);
        // TODO
        response.setMessage(SUCCESS_MESSAGE);

        // 判断
        if (pageSize == 0)
            // 赋值
            pageSize = DEFAULT_PAGE_SIZE;

        // 计算
        Long totalPage = (long) Math.ceil((double) totalCount / pageSize);

        // 判断
        if (page > totalPage)
            // 赋值
            page = totalPage;
        // 判断
        if (page <= 0)
            // 赋值
            page = 1L;

        // TODO
        Long offset = pageSize * (page - 1);
        // TODO
        response.setCount(totalCount);
        // TODO
        response.setLimit(pageSize);
        // TODO
        response.setTotalPage(totalPage);
        // TODO
        response.setPage(page);
        // TODO
        response.setOffset(offset);
        // 返回
        return response;
    }

}

